package _14并发工具类_CountDownLatch;

import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CountDownLatch;

/*
    目标：了解CountDownLatch的使用

    作用：
        简称线程倒数计数器。
        可以实现一个或者多个线程，等待另外N个线程执行完毕后才执行。

    用法：
        1.构造方法：
            public CountDownLatch(int count)  count表示需要先执行的线程的数量。

        2.成员方法：
            public void await()  让执行该方法的线程等待。直到count为0时执行。
            public void countDown() 每调用一次，count值减1。当count减为0时之前await的线程就可以执行。
 */
public class Demo1 {
    static CopyOnWriteArrayList<Integer> list = new CopyOnWriteArrayList<>();
    static CountDownLatch latch = new CountDownLatch(1);

    public static void main(String[] args) throws InterruptedException {
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 100000; i++) {
                    list.add(i);

                }
                System.out.println("线程1完成"+list.size());
                latch.countDown();
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 100000; i++) {
                    list.add(i);
                }
                System.out.println("线程2完成"+list.size());
                latch.countDown();
            }
        }).start();


        latch.await();
        System.out.println(list.size());
    }
}
